package com.optimize01.father;

import com.optimize01.service.FlyBehavior;
import com.optimize01.service.QuackBehavior;

/**
 * 鸭子抽象超类
 * @Author
 * @Create 2021/2/2
 */
public abstract class Duck {

    // 飞行行为接口
    private FlyBehavior flyBehavior;
    // 鸣叫行为接口
    private QuackBehavior quackBehavior;

    public void performFly() {
        flyBehavior.fly();
    }

    public void performQuack() {
        quackBehavior.quack();
    }

    /**
     * 非公共属性方法
     *     创建的所有不同类型的对象都需要重写当前方法
     */
    public abstract void display();

    /**
     * 公共属性方法
     *     创建的所有不同类型的对象都具有这一属性
     */
    public void swim() {
        System.out.println("我会游泳！");
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}
